<?php

namespace Smalot\Cups\Model;

/**
 * Interface JobInterface
 *
 * @package Smalot\Cups\Model
 */
interface JobInterface
{

    /**
     * @return int|null
     */
    public function getId(): ?int;

    /**
     * @param int $id
     *
     * @return JobInterface
     */
    public function setId(int $id): self;

    /**
     * @return string|null
     */
    public function getUri(): ?string;

    /**
     * @param string $uri
     *
     * @return JobInterface
     */
    public function setUri(string $uri): self;

    /**
     * @return string|null
     */
    public function getPrinterUri(): ?string;

    /**
     * @param string $printerUri
     *
     * @return JobInterface
     */
    public function setPrinterUri(string $printerUri): self;

    /**
     * @return string|null
     */
    public function getName(): ?string;

    /**
     * @param string $name
     *
     * @return JobInterface
     */
    public function setName(string $name): self;

    /**
     * @return string|null
     */
    public function getUsername(): ?string;

    /**
     * @param string $username
     *
     * @return JobInterface
     */
    public function setUsername(string $username): self;

    /**
     * @return string|null
     */
    public function getPageRanges(): ?string;

    /**
     * @param string $pageRanges
     *
     * @return JobInterface
     */
    public function setPageRanges(string $pageRanges): self;

    /**
     * @return int
     */
    public function getCopies(): int;

    /**
     * @param int $copies
     *
     * @return JobInterface
     */
    public function setCopies(int $copies): self;

    /**
     * @return string
     */
    public function getSides(): string;

    /**
     * @param string $sides
     *
     * @return JobInterface
     */
    public function setSides(string $sides): self;

    /**
     * @return int|null
     */
    public function getFidelity(): ?int;

    /**
     * @param int $fidelity
     *
     * @return JobInterface
     */
    public function setFidelity(int $fidelity): self;

    /**
     * @return array
     */
    public function getContent(): array;

    /**
     * @param string $filename
     * @param string $name
     * @param string $mimeType
     *
     * @return JobInterface
     */
    public function addFile(string $filename, string $name = '', string $mimeType = 'application/octet-stream'): self;

    /**
     * @param string $text
     * @param string $name
     * @param string $mimeType
     *
     * @return JobInterface
     */
    public function addText(string $text, string $name = '', string $mimeType = 'text/plain'): self;

    /**
     * @return array
     */
    public function getAttributes(): array;

    /**
     * @param array $attributes
     *
     * @return JobInterface
     */
    public function setAttributes(array $attributes): self;

    /**
     * @return string|null
     */
    public function getState(): ?string;

    /**
     * @param string $state
     *
     * @return JobInterface
     */
    public function setState(string $state): self;

    /**
     * @return string|null
     */
    public function getStateReason(): ?string;

    /**
     * @param string $stateReason
     *
     * @return JobInterface
     */
    public function setStateReason(string $stateReason): self;
}
